﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using myFinance.Models;

namespace myFinance.BLL
{
	public class SubGrupoDespesaBll
	{
        public static readonly Container db = new Container();

		/// <summary>
		/// Faz uma pesquisa e retorna o SubGrupoDespesa de acordo com o código(id) do SubGrupoDespesa e com o nome de usuário
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="id">Int</param>
		/// <param name="usuario">String</param>
		/// <returns>SubGrupoDespesa</returns>
		public static SubGrupoDespesa GetSubGrupoDespesa(int id, string usuario)
		{
			return db.SubGrupoDespesa.FirstOrDefault(f => f.Id == id && f.GrupoDespesa.Pessoa.Usuario == usuario);
		}

		/// <summary>
		/// Retorna uma lista de SubGrupoDespesas por id de usuário (Pessoa.Id)
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="idPessoa">Int</param>
		/// <param name="mes">Int</param>
		/// <param name="ano">Int</param>
		/// <param name="cadastro">Boolean</param>
		/// <returns>Lista de SubGrupoDespesas</returns>
		public static List<SubGrupoDespesa> GetLista(int idPessoa)
		{
			return db.SubGrupoDespesa.Where(w => w.GrupoDespesa.PessoaId == idPessoa).ToList();
		}

		/// <summary>
		/// Retorna uma lista de SubGrupoDespesas por nome de usuário (Pessoa.Usuario ou User.Identity.Name)
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="usuario">String</param>
		/// <returns>Lista de SubGrupoDespesas</returns>
		public static List<SubGrupoDespesa> GetLista(string usuario)
		{
			return db.SubGrupoDespesa.Where(w => w.GrupoDespesa.Pessoa.Usuario == usuario).ToList();
		}

        /// <summary>
        /// Retorna uma lista de SubGrupoDespesas por nome de usuário (Pessoa.Usuario ou User.Identity.Name) e por id do Grupo de Despesas
        /// </summary>
        /// <param name="db">Container</param>
        /// <param name="usuario">String</param>
        /// <returns>Lista de SubGrupoDespesas</returns>
        public static List<SubGrupoDespesa> GetLista(string usuario, int grupoDespesaId)
        {
            return db.SubGrupoDespesa.Where(w => w.GrupoDespesa.Pessoa.Usuario == usuario && w.GrupoDespesaId == grupoDespesaId).ToList();
        }

		/// <summary>
		/// Retorna uma lista de Sub Grupos de Despesa de acordo com o Id do Grupo de Despesa e do Id da Pessoa
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="idGrupoDespesa">Int</param>
		/// <returns>List(SubGrupoDespesa)</returns>
		public static List<SubGrupoDespesa> PreencheComboSubGrupoDespesa(int idPessoa, int idGrupoDespesa)
		{
            return db.SubGrupoDespesa.Where(w => w.GrupoDespesa.PessoaId == idPessoa && w.GrupoDespesaId == idGrupoDespesa).ToList();
		}

		/// <summary>
        /// Retorna uma lista de Sub Grupos de Despesa de acordo com o Id do Grupo de Despesa e do Usuário
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="usuario">strin</param>
        /// <returns>List(SubGrupoDespesa)</returns>
        public static List<SubGrupoDespesa> PreencheComboSubGrupoDespesa(string usuario, int idGrupo)
		{
            return db.SubGrupoDespesa.Where(w => w.GrupoDespesa.Pessoa.Usuario == usuario && w.GrupoDespesaId == idGrupo).ToList();
		}

		/// <summary>
		/// Grava o SubGrupoDespesa no banco de dados
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="p">SubGrupoDespesa</param>
		/// <returns>Boolean</returns>
		public static bool Add(SubGrupoDespesa sgd)
		{
			try
			{
				db.SubGrupoDespesa.AddObject(sgd);
				db.SaveChanges();
				return true;
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		/// <summary>
		/// Altera o SubGrupoDespesa no banco de dados
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="p">SubGrupoDespesa</param>
		/// <returns>Boolean</returns>
		public static bool Edit(SubGrupoDespesa sgd)
		{
			try
			{
				db.SubGrupoDespesa.ApplyCurrentValues(sgd);
				db.SaveChanges();
				return true;
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		/// <summary>
		/// Exclui um SubGrupoDespesa do banco de dados
		/// </summary>
		/// <param name="db">Container</param>
		/// <param name="p">SubGrupoDespesa</param>
		/// <returns>Boolean</returns>
		public static bool Delete(int id)
		{
			try
			{
				var sgp = db.SubGrupoDespesa.FirstOrDefault(f => f.Id == id);
				db.SubGrupoDespesa.DeleteObject(sgp);
				db.SaveChanges();
				return true;
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
	}
}